package com.xzy.e;

import com.xzy.service.*;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 自动依赖注入的方式：@Autowired + 属性|方法
 *
 * @author xzy
 * @date 2021/12/7  21:54
 */
@Slf4j
@ToString
public class AutowiredServiceImpl {

    /*
     * 自动依赖注入的方式：@Autowired + 属性|方法
     *
     * @Autowired + 属性：Spring先根据[属性类型]到容器中寻找Bean（byType），如果找到多个Bean则根据[属性名称]进一步筛选（byName）
     * @Autowired + 方法：Spring先根据[参数类型]到容器中寻找Bean（byType），如果找到多个Bean则根据[参数名称]进一步筛选（byName）
     *
     * 找不到Bean的情况：
     *     1.容器中没有指定类型的Bean
     *     2.容器中有多个指定类型的Bean，但是没有一个Bean的名称与属性名（或参数名）匹配
     */

    @Autowired
    private BookService bookService1;
    private StudentService studentService;
    private TeacherService teacherService;
    private CourseService courseService;
    private SchoolService schoolService;

    @Autowired
    public AutowiredServiceImpl(StudentService studentService1, TeacherService teacherService2) {
        this.studentService = studentService1;
        this.teacherService = teacherService2;
        log.info("实例化 -> AutowiredServiceImpl({},{})", studentService1, teacherService2);
    }

    @Autowired
    public void setCourseService(CourseService courseService2) {
        this.courseService = courseService2;
        log.info("依赖注入 -> setCourseService({})", courseService2);
    }

    @Autowired
    public void xxx(SchoolService schoolService1) {
        this.schoolService = schoolService1;
        log.info("依赖注入 -> xxx({})", schoolService1);
    }

}
